package tech.aistar.mapper;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tech.aistar.pojo.User;
import tech.aistar.pojo.UserVo;

import java.util.List;

/**
 * 1. xml开发方式 - 灵活
 * 2. 注解开发方式 - 简单
 */
public interface UserMapper {

    //alt + enter
    @Select("select * from user")
    List<User> findAll();

    /**
     * 参数如果是单个简单类型,比如String,基本类型以及包装类型
     * 那么#{}中的占位符的名称可以是任意的
     * @param email
     * @return
     */
    @Select("select * from user where email=#{value}")
    User getByEmail(String email);

    @Select("select * from user where username=#{uname} and password=#{pwd}")
    User getByUsernameAndPassword(@Param("uname") String username,@Param("pwd") String password);

    //返回类型int - 受影响行数.如果插入一条成功,返回1
    //如果插入失败,返回数字0
    //反射技术
    //规则:只要占位符的名称和参数对象类型的属性的名称高度保持一致即可
    @Insert("insert into user(username,email,password,phone,img_url,role) values(#{username},#{email},#{password},#{phone},#{imgUrl},#{role})")
    int save(User user);

    @Select("select role,count(id) cc from user group by role")
    List<UserVo> countRole();
}
